package com.springcloud.demo.base.vo;

import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

/**
 * 返回结果类
 */
@Data
@Builder
public class ResultVO<T> implements Serializable {

    /**
     * 返回码
     */
    private int code = 0;

    /**
     * 返回信息
     */
    private String message = "成功";

    /**
     * 返回数据
     */
    private T data;

    /**
     * 默认成功
     */
    public static <T> ResultVO<T> ok() {
        ResultType resultType = ResultType.OK;
        return ResultVO.<T>builder()
                .code(resultType.getCode())
                .message(resultType.getMsg())
                .build();
    }

    /**
     * 默认成功
     */
    public static <T> ResultVO<T> ok(T data) {
        ResultType resultType = ResultType.OK;
        return ResultVO.<T>builder()
                .code(resultType.getCode())
                .message(resultType.getMsg())
                .data(data)
                .build();
    }

    /**
     * 错误，可传入具体错误参数
     */
    public static <T> ResultVO<T> fail(ResultType resultType) {
        return ResultVO.<T>builder()
                .code(resultType.getCode())
                .message(resultType.getMsg())
                .build();
    }

    /**
     * 错误，可传入具体错误参数
     */
    public static <T> ResultVO<T> fail(ResultType resultType, T data) {
        return ResultVO.<T>builder()
                .code(resultType.getCode())
                .message(resultType.getMsg())
                .data(data)
                .build();
    }
}
